'use strict';

const BaseController = require('./base.js');

class RoleController extends BaseController {
    async index() {

        let result = await this.ctx.model.Role.find({});
        // console.log(result)
        await this.ctx.render('admin/role/index', {
            list: result
        })
    }

    // 添加角色页面
    async add() {
        await this.ctx.render('admin/role/add')
    }

    // 添加角色
    async doAdd() {
        // console.log(this.ctx.request.body);
        let role = new this.ctx.model.Role({
            title: this.ctx.request.body.title,
            description: this.ctx.request.body.description,
        })

        await role.save();
        await this.success('/admin/role', '增加角色成功');
        
    }

    // 编辑角色页面
    async edit() {
        let id = this.ctx.query.id;
        let result = await this.ctx.model.Role.find({"_id":id})
        await this.ctx.render('admin/role/edit', {
            list: result[0]
        })
    }

    // 编辑角色提交
    async doEdit() {
        let _id = this.ctx.request.body._id;
        let title = this.ctx.request.body.title;
        let description = this.ctx.request.body.description;
        
        await this.ctx.model.Role.updateOne({"_id":_id}, {title, description})
        await this.success('/admin/role', '编辑角色成功');
    }

    // 角色授权页面
    async auth() {

        /**
         * 1. 获取全部的权限
         * 2. 查询当前角色拥有的权限(查询当前角色的权限id) 把查找到的数据放在组中
         * 3. 循环遍历所有的权限数据  判断当前权限是否在校色权限的数组中， 如果在数组中：选中， 如果不再：未选中
         */

        let role_id = this.ctx.request.query.id;

        // 根据角色id 获取权限列表 
        let result = await this.service.admin.getAuthList(role_id); 

        await this.ctx.render('admin/role/auth', {
            list: result,
            role_id: role_id
        });
    }

    // 保存授权
    async doAuth() {
        /*
        1. 删除当前角色下面的所有权限
        2. 把获取的权限和角色增加到数据库
        */
        // console.log(this.ctx.request.body);

        let role_id = this.ctx.request.body.role_id;
        let access_node = this.ctx.request.body.access_node;

        // 1 删除当前角色下面的所有权限
        await this.ctx.model.RoleAccess.deleteMany({"role_id": role_id});

        // 2 给role_access增加数据 把获取的权限和角色增加到数据库
        for (var i=0; i<access_node.length; i++) {
            var roleAccessData = new this.ctx.model.RoleAccess({
                role_id:role_id,
                access_id:access_node[i]
            })
            roleAccessData.save();
        }

        await this.success('/admin/role/auth?id='+role_id,"授权成功");
    }

}

module.exports = RoleController;
